|
Date : 29 et 30 mai 1991 Protection : MOT DE PASSE Programme : DRAKKHEN Outils : SOFT-ICE V2.50a Fichier : DRAKE.CC1 et DRAKC.CC1 Temps pass� : 8 HEURES Soci�t� : INFOGRAMES Divers : Origine : INDONESIE - SOLO Num�ro : 078 Je commence par le fichier TATOU.COM avant de me rendre compte 8 heures plus tard que j'avais fait fausse route.... En 1B1B:0E26 on trouve une case m�moire dans laquelle on ne met pas '1' si le mot de passe est �ronn�. Un saut JZ ( en 0E24 ) transform� en JNZ force un 1 dans cette position. 1B1B:0E17 9A3500FE27 CALL 27FE:0035 ( appel d'un overlay ) 1B1B:0E1C 83C406 ADD SP,+06 1B1B:0E1F A39818 MOV [1898],AX 1B1B:0E22 0BC0 OR AX,AX 1B1B:0E24 7407 JZ 0E2D 1B1B:0E26 C746F20100 MOV WORD [BP-0E],0001 1B1B:0E2B EB3B JMP 0E68 Cette routine est cod�e ( �videmment ), je place SOFT-ICE en BPM � l'adresse 1B1B:0E24 en �criture avec 74. Il s'arr�te de suite � l'adresse 0C07:08A4; 0C07:08A4 F3A4 REPZ MOVSB 0C07:08A6 59 POP CX 0C07:08A7 8BC1 MOV AX,CX 0C07:08A9 0BC3 OR AX,BX 0C07:08AB 75BE JNZ 086B L'id�e me vient de dessassembler avec SOURCER, de modifier et de r�assembler. SOURCER avec comme TARGET MASM 5.1 et 9 passes arrive sans probl�me � ses fins. Un test rapide de r�assemblage et un essai montre que cel� se plante ! MASM TATOU.ASM donne 0 errors, bien. LINK TATOU.OBJ donne le message " WARNING NO STACK SEGMENT " Le probl�me c'est que maintenant nous avons un fichier EXE au lieu d'un COM. Il existe pourtant une solution c'est d'utiliser l'utilitaire EXE2BIN fourni en standart par le DOS et de transformer l'EXE en COM. En fait il transforme en fichier BIN qu'il suffit de renomer *.COM et l� �a marche parfaitement. J'ajoute donc dans le fichier SOURCE l'instruction; MOV BYTE PTR ES:[0054],75 ( 6 octets ) et je r�assemble. Je fais un essai mais le SOFT se plante.... Je relance SOFT-ICE mais avec le LOADER pour faire du pas � pas dans TATOU.COM d�s la premi�re instruction, et que vois-je ? Je vous le donne en mille; c'est un programme qui se modifie lui-m�me !!! Des MOV CS:[xxx] sont largement utilis�s.... Donc interdiction de rallonger le programme ne serait-ce d'un octet. Je vais revenir � la fa�on classique style FINAL-ORBIT et 4DBOXING. Apr�s de longs et p�nibles essais j'arrive � ins�rer un JMP apr�s la routine de codage, ( en 0C07:08A7 ) � trouver une zone texte que je peux utiliser en zone CODE et � y placer une instruction qui incr�mente mon 74 d�s qu'il se pr�sente, puis � resauter ( en ayant execut� les deux instructions que j'ai du d�placer ) apr�s mon JMP pour continuer le d�roulement normal ( en 0C07:08AB ). Et le soft fonctionne bien sans mot de passe mais se plante au bout d'un temps variant de 30 secondes � une minute. Avec SOFT-ICE j'arrive � trouver que le programme tourne dans une seule instruction qui saute sur elle-m�me style : loc1 JMP loc1 Ces quelques octets sont en clair dans les fichiers DRAKE.CC1 mais une fois remplac�s par des NOP font apparaitre des INVALID INSTRUCTION qui plantent SOFT-ICE et le jeu lorsqu'il est lanc� seul. Donc retour � la case d�part. Je suis pr�t � abandonner, mais je ne suis pas encore all� au bout de toutes les solutions possibles et notamment celle qui consiste � prendre le probl�me l�g�rement en amont et de voir "CE" qui influe sur mon fameux saut que j'essaie depuis 8 heures d'inverser. Donc je repars � l'envers � partir de mon saut JZ en 0E24; C'est le r�sultat d'un OR AX,AX diff�rent de zero qui switche correcte- ment mon saut. Dans mon cas avec une r�ponse fausse AX contient zero. Il faut donc continuer � remonter pour savoir ce qui influence AX. La prochaine instruction rencontr�e est un MOV de AX dans une position m�moire, donc rien � voir si ce n'est que cette position m�moire doit contenir forc�ment quelque chose qui est different de zero ! Ensuite vient une addition sur le pointeur de pile, donc l� aussi aucune influence sur AX. Il ne reste plus que le CALL inter-segments. Comme TATOU.COM est un COM ! cel� ne peut signifier qu'une chose; on saute dans un overlay de TATOU.COM, la suite me donnera raison puisqu'il s'agit des programmes DRAKC.CC1 pour la version CGA et DRAKE.CC1 pour la version EGA. Dans ce CALL on teste les 4 caract�res entr�s lors de la demande du mot de passe et d�s qu'un seul est mauvais on sort en faisant un XOR AX,AX ! ( on remet donc AX � zero ) nous y voil�.... D�tail du CALL 27FE:0035 27FE:0061 750D JNZ 0070 Si pas = on saute � 70 ( � 70 on XOR AX,AX ! ) 27FE:0063 47 27FE:0064 4A 27FE:0065 E2F4 LOOP 005B On tourne 4 fois. 27FE:0067 B80200 MOV AX,0002 Et ici on met 2 dans AX. 27FE:006A POP . . . . 27FE:006F CB RETF Et retour avec 2 dans AX 27FE:0070 XOR AX,AX Ici on place 0 dans AX. . POP . . . CB RETF Et retour avec 0 dans AX De plus cette routine �tant dans les 2 overlays, elle est en clair ! Il suffit de faire sauter le saut en 67 au lieu de 70 et le tour est jou�. Ce qui revient � remplacer 0D par 04. Et dire que j'aurais pu avoir cette id�e 8 heures moins le quart plus t�t ! ( heureusement que j'aime �a... ) Avec PCTOOLS placer en SL 222 et DEP 287 un 04 dans le fichier DRAKC.CC1 ( cga ) et SL 224 DEP 436 dans le fichier DRAKE.CC1 ( ega ) . FREDDY |